import router from '@/router'
import store from '@/store'
import nprogress from 'nprogress' // 引入进度条
import 'nprogress/nprogress.css' // 引入进度条样式

// 导航守卫token拦截
router.beforeEach(async(to, from, next) => {
  // console.log(4, to, from)

  //   守卫的另一种写法
  const token = store.getters.token
  const url = to.path
  const whiteList = ['/login', '/404']

  // 只有有token的情况，才能去获取资料
  if (token && url === '/login') {
    next('/')
  }
  if (token && url !== '/login') {
    // console.log(20, store.getters.userId)
    if (!store.getters.userId) {
      // console.log(1)
      const { roles } = await store.dispatch('user/getUserInfo')
      // const res = await store.dispatch('user/getUserInfo')
      const routes = await store.dispatch('permission/filterRoutes', roles.menus)
      // console.log(27, roles.menus)
      // 添加动态路由到路由表
      router.addRoutes([...routes, { path: '*', redirect: '/404', hidden: true }])
      next(url)
      return
    }
    next()
  }

  if (!token && whiteList.includes(url)) {
    next()
  }
  if (!token && !whiteList.includes(url)) {
    next('/login')
  }

  nprogress.done() // 解决手动切换地址时 进度条不关闭的问题
  //   有token，跳转去首页
  //   if (store.getters.token) {
  //     if (to.path === '/login') {
  //       next('/')
  //     } else {
  //       // 有token，不去登录页，放行
  //       next()
  //     }
  //   } else {
  //     // 没token，允许不登陆就可以查看的，放行
  //     // 先列出一个白名单（允许不登陆就查看的名单）
  //     const whiteList = ['/login', '/404']
  //     // if (whiteList.indexOf(to.path) !== -1) {
  //     //   next()
  //     // }
  //     // 能够判定whiteList里面的to.path是否存在白名单里面的东西。没有就返回false
  //     if (whiteList.includes(to.path)) {
  //       next()
  //     } else {
  //       // 没token，其他页面需要登录才能查看的，跳转去登录页
  //       next('/login')
  //     }
  //   }
})
router.afterEach(() => {
  nprogress.done() // 关闭进度条
})
